Cross-Site Scripting (XSS) এবং Cross-Site Request Forgery (CSRF) হল দুটি সাধারণ সাইবার আক্রমণ যা ওয়েব অ্যাপ্লিকেশনে নিরাপত্তা ঝুঁকি তৈরি করতে পারে। MVC ফ্রেমওয়ার্ক-এ এই আক্রমণগুলির থেকে সুরক্ষা নিশ্চিত করা প্রয়োজন, যাতে অ্যাপ্লিকেশনটি নিরাপদ এবং ইউজারের তথ্য সুরক্ষিত থাকে।
Cross-Site Scripting (XSS) কি?
XSS (Cross-Site Scripting) হল একটি নিরাপত্তা দুর্বলতা যেখানে আক্রমণকারী ইউজারের ব্রাউজারে ক্ষতিকর স্ক্রিপ্ট (JavaScript, HTML) চালাতে সক্ষম হয়। এটি সাধারণত ফর্ম ইনপুট বা URL প্যারামিটারগুলির মাধ্যমে আক্রমণ করা হয়। ইউজার যখন ক্ষতিকর স্ক্রিপ্টটিকে প্রবেশ করায়, তখন সেই স্ক্রিপ্ট ইউজারের ব্রাউজারে এক্সিকিউট হয়, যা ব্যক্তিগত তথ্য চুরি, সেশন হাইজ্যাকিং, বা ইউজারের অ্যাকাউন্টে অননুমোদিত এক্সেস তৈরি করতে পারে।
XSS আক্রমণ প্রতিরোধের জন্য পদ্ধতি:
- ইনপুট ভ্যালিডেশন (Input Validation): ইউজারের ইনপুট যাচাই করে তা গ্রহণ করা। অযাচিত স্ক্রিপ্ট বা HTML কোডকে ব্লক করা।
- HTML এন্ডকোডিং (HTML Encoding): ইউজারের ইনপুট HTML ট্যাগ এবং স্ক্রিপ্ট হিসেবে এক্সিকিউট না হয়ে সঠিকভাবে প্রেজেন্ট করা। উদাহরণস্বরূপ,
<চিহ্ন<হিসেবে এন্ডকোড করা। - কনটেন্ট সিকিউরিটি পলিসি (Content Security Policy - CSP): CSP ব্যবহার করে ব্রাউজারে এক্সটার্নাল স্ক্রিপ্ট নিষিদ্ধ করা।
Laravel-এ XSS প্রতিরোধের উদাহরণ:
Laravel ফ্রেমওয়ার্কে Blade Templates ব্যবহার করলে, সকল ইউজার ইনপুট স্বয়ংক্রিয়ভাবে HTML encoding হয়ে থাকে। যেমন:
<p>{{ $userInput }}</p>
এখানে {{ $userInput }} ব্যবহার করলে, Laravel সরাসরি স্ক্রিপ্ট বা HTML ট্যাগ প্রিন্ট করতে দেবে না, বরং এটি এন্ডকোড করে উপস্থাপন করবে।
এছাড়া, যদি কোনো কারণে ইনপুটের HTML কোড এক্সিকিউট করতে হয়, তবে !! সিম্বল ব্যবহার করা যেতে পারে:
<p>{!! $userInput !!}</p>
এটি সাবধানতার সাথে ব্যবহার করতে হবে, কারণ এটি HTML ইনপুটকে এক্সিকিউট করার অনুমতি দেয়, যা নিরাপত্তার জন্য ঝুঁকিপূর্ণ হতে পারে।
Cross-Site Request Forgery (CSRF) কি?
CSRF (Cross-Site Request Forgery) একটি আক্রমণ যেখানে আক্রমণকারী ইউজারের ব্রাউজারে একটি অননুমোদিত রিকোয়েস্ট পাঠাতে সক্ষম হয়। এটি সাধারণত ইউজারের অথেন্টিকেশন তথ্য (যেমন কুকি বা সেশন) ব্যবহার করে এবং ইউজারের অনুকূলে কোনো কর্ম সম্পাদন করে, যেমন পাসওয়ার্ড পরিবর্তন বা ফান্ড ট্রান্সফার। CSRF আক্রমণের মাধ্যমে আক্রমণকারী ইউজারকে অবগত না করেই ক্ষতিকর কার্যক্রম সম্পাদন করতে পারে।
CSRF আক্রমণ প্রতিরোধের জন্য পদ্ধতি:
- CSRF Token: সুরক্ষিত ফর্ম বা রিকোয়েস্টে একটামাত্র CSRF Token ব্যবহার করা হয়, যা ব্যবহারকারীকে সুরক্ষিতভাবে রিকোয়েস্ট পাঠানোর অনুমতি দেয়। প্রতিটি ফর্মের সঙ্গে একটি টোকেন পাঠানো হয়, যা সার্ভারে যাচাই করা হয়। যদি টোকেন মেলে না, তবে রিকোয়েস্টটি বাতিল করা হয়।
- HTTP-only কুকি: কুকিগুলি শুধুমাত্র সার্ভার থেকে অ্যাক্সেসযোগ্য হওয়া উচিত, যাতে ক্লায়েন্ট সাইড JavaScript দ্বারা কুকি অ্যাক্সেস করা না যায়।
- SameSite কুকি পলিসি:
SameSiteকুকি পলিসি ব্যবহার করলে শুধুমাত্র একই সাইটের রিকোয়েস্টের জন্য কুকি পাঠানো হবে, যা CSRF আক্রমণ প্রতিরোধ করতে সাহায্য করে।
Laravel-এ CSRF প্রতিরোধের উদাহরণ:
Laravel ফ্রেমওয়ার্কে CSRF প্রতিরোধের জন্য স্বয়ংক্রিয়ভাবে CSRF Tokens ব্যবহার করা হয়। প্রতিটি ফর্মে একটি CSRF টোকেন অন্তর্ভুক্ত করা হয়, যেটি @csrf ডিরেকটিভ দিয়ে করা হয়।
<form method="POST" action="/submit-form">
@csrf
<input type="text" name="username" required>
<button type="submit">Submit</button>
</form>
এখানে @csrf টোকেন স্বয়ংক্রিয়ভাবে ফর্মের মধ্যে ইনপুট ফিল্ডে যোগ হয়, যা প্রতিটি ফর্ম রিকোয়েস্টের সঙ্গে যুক্ত থাকে এবং সার্ভারে যাচাই করা হয়। যদি CSRF টোকেন ভুল হয়, তবে রিকোয়েস্টটি বাতিল করা হবে।
XSS এবং CSRF থেকে সুরক্ষা নিশ্চিত করতে উপসংহার
- XSS আক্রমণ প্রতিরোধ করতে HTML encoding এবং input validation অপরিহার্য। Laravel স্বয়ংক্রিয়ভাবে ইনপুট এনকোডিং প্রক্রিয়া সম্পাদন করে।
- CSRF আক্রমণ থেকে সুরক্ষা নিশ্চিত করতে CSRF tokens ব্যবহার করা হয়, যা Laravel-এ স্বয়ংক্রিয়ভাবে থাকে। এটি ইউজারের ফর্ম সাবমিশনের সময় নিরাপত্তা নিশ্চিত করে।
এই দুইটি আক্রমণের প্রতিরোধে উপযুক্ত পদক্ষেপ নিয়ে অ্যাপ্লিকেশনটি নিরাপদ রাখা সম্ভব, যার মাধ্যমে ইউজারের তথ্য এবং অ্যাপ্লিকেশন সুরক্ষিত থাকে।
Read more